const crypto = require('crypto');
module.exports = app => {
	const { INTEGER, STRING, DATE, ENUM, TEXT } = app.Sequelize;

	const User = app.model.define('user', {
		id: {
			type: INTEGER(20),
			primaryKey: true, // 作为主键
			autoIncrement: true // 自增
		},
		username: {
			type: STRING(30),
			// 将 allowNull 设置为 false 将为该列添加 NOT NULL,
			allowNull: false,
			defaultValue: '',
			comment: '用户名', // 备注
			unique: true // 唯一
		},
		nickname: {
			type: STRING(30),
			allowNull: false,
			defaultValue: '',
			comment: '昵称'
		},
		email: {
			type: STRING(160),
			allowNull: false,
			defaultValue: '',
			comment: '邮箱'
		},
		password: {
			type: STRING,
			allowNull: false,
			defaultValue: '',
			comment: '密码',
			set(value) {
				const hmac = crypto.createHash('sha256', app.config.crypto.secret);
				hmac.update(value);
				this.setDataValue('password', hmac.digest('hex'));
			}
		},
		avatar: {
			type: STRING,
			allowNull: true,
			defaultValue: '',
			comment: '头像'
		},
		phone: {
			type: STRING(11),
			allowNull: false,
			defaultValue: '',
			comment: '手机'
		},
		sex: {
			type: ENUM,
			values: ['男', '女', '保密'],
			allowNull: false,
			defaultValue: '男',
			comment: '性别'
		},
		desc: {
			type: TEXT,
			allowNull: false,
			defaultValue: '',
			comment: '个性签名'
		},
		total_size: {
			type: INTEGER,
			defaultValue: 10485760,
			comment: '网盘总大小，单位:kb'
		},
		used_size: {
			type: INTEGER,
			defaultValue: 0,
			comment: '网盘已使用大小，单位:kb'
		},
		created_time: DATE,
		updated_time: DATE
	});
	return User;
};
